GitOps 簡(jiǎn)化并自動(dòng)化了SDLC中最繁重的手動(dòng)操作——基礎(chǔ)設(shè)施配置和管理。GitOps 使DevOps 基礎(chǔ)架構(gòu)更具彈性、一致和可靠,如果您依賴手動(dòng)部署,這些特性需要大量財(cái)富才能實(shí)現(xiàn)。
本文解釋了 GitOps 是什么,并列出了該策略為軟件開發(fā)團(tuán)隊(duì)和項(xiàng)目帶來的好處。繼續(xù)閱讀以清楚地了解采用 GitOps 是否對(duì)您的公司來說是一項(xiàng)值得的投資。
什么是 GitOps?
GitOps 是將應(yīng)用程序開發(fā)的DevOps 原則應(yīng)用于基礎(chǔ)設(shè)施管理的實(shí)踐。借助 GitOps,開發(fā)人員將基礎(chǔ)架構(gòu)視為代碼,就像對(duì)待應(yīng)用程序代碼一樣,以自動(dòng)更新并使更改可追溯。
采用 GitOps 的團(tuán)隊(duì)將基礎(chǔ)架構(gòu)配置文件編寫為代碼,并將它們保存在專用的Git存儲(chǔ)庫中。Git 充當(dāng)所有基礎(chǔ)架構(gòu)的單一事實(shí)來源,它支持:
- 可靠的配置版本控制。
- 高度一致性,因?yàn)槲募谀看尾渴饡r(shí)都會(huì)生成相同的環(huán)境(與應(yīng)用程序源代碼生成相同的應(yīng)用程序二進(jìn)制文件的方式相同)。
一旦團(tuán)隊(duì)向 Git 存儲(chǔ)庫提交更改,DevOps 管道會(huì)自動(dòng)部署基礎(chǔ)架構(gòu)更新,無需人工干預(yù)。GitOps 是一個(gè)相對(duì)年輕的策略。總部位于英國(guó)的公司 Weaveworks 開發(fā)了該框架的基礎(chǔ)并于 2017 年創(chuàng)造了該術(shù)語。從那時(shí)起,GitOps 成為需要可靠且可擴(kuò)展的基礎(chǔ)架構(gòu)的用例的首選實(shí)踐,例如:
- 云原生架構(gòu)。
- 任何涉及Kubernetes 的基礎(chǔ)設(shè)施。
- 微服務(wù)架構(gòu)。
- 具有持續(xù)交付功能的管道,可自動(dòng)將更改部署到生產(chǎn)中。
- 混合和多云部署。
GitOps 提供高度以開發(fā)人員為中心的體驗(yàn)。基礎(chǔ)設(shè)施管理發(fā)生在與應(yīng)用程序開發(fā)相同的版本控制系統(tǒng)中,使團(tuán)隊(duì)能夠在中央位置進(jìn)行協(xié)作,同時(shí)受益于 Git 的內(nèi)置功能。
GitOps 和 DevOps 有什么區(qū)別
雖然 GitOps 和 DevOps 之間有很多重疊,但這是兩個(gè)不同的概念:
- DevOps 是一種整合開發(fā) (Dev) 和 IT 運(yùn)營(yíng) (Ops) 團(tuán)隊(duì)工作的文化。DevOps 工具和實(shí)踐打破了 Dev 和 Ops 之間的孤島,同時(shí)提高了代碼質(zhì)量并縮短了 SDLC。
- GitOps 是 DevOps 的一個(gè)子集,專門專注于通過 Git 自動(dòng)化基礎(chǔ)設(shè)施管理。GitOps 是 IaC 發(fā)展的下一步,IaC 本身起源于DevOps 最佳實(shí)踐。
以下是 GitOps 和 DevOps 之間的其他一些顯著差異:
- GitOps 是一個(gè)專門的框架,而 DevOps 更像是一種哲學(xué),需要對(duì)公司創(chuàng)建軟件的方式進(jìn)行根本性的改變。
- DevOps 不需要使用任何特定工具。GitOps 要求團(tuán)隊(duì)使用 Git(盡管您有多種其他工具可以與 Git 一起使用)。
- 一些 DevOps 管道具有用于部署的手動(dòng)觸發(fā)器。使用 GitOps,觸發(fā)器始終是自動(dòng)的,并且基于對(duì) Git 存儲(chǔ)庫的更改。
- 您可以在沒有 GitOps 的情況下?lián)碛?DevOps,但反之則不然。
DevOps 和 GitOps 都適用于任何類型的基礎(chǔ)架構(gòu),但它們的優(yōu)勢(shì)在云計(jì)算和裸機(jī)云環(huán)境中才能真正感受到。這兩種策略都要求團(tuán)隊(duì)熟悉 IaC,而且都嚴(yán)重依賴自動(dòng)化來加快流程并在問題影響最終用戶之前解決問題。
GitOps 是如何工作的?
GitOps 團(tuán)隊(duì)使用Terraform 或 Ansible等工具以聲明方式配置系統(tǒng)。這種方法側(cè)重于結(jié)果(期望的狀態(tài))而不是達(dá)到結(jié)果的確切步驟。這是一個(gè)簡(jiǎn)化的命令式語句(與聲明式方法相反)的樣子:
- 在 XZY 機(jī)器上安裝以下依賴項(xiàng)。
- 從 XYZ 網(wǎng)站下載代碼。
- 將代碼移至此目錄。
- 對(duì)以下機(jī)器再重復(fù)此過程四次。
這個(gè)過程的聲明版本會(huì)簡(jiǎn)單地寫成:以下五臺(tái)機(jī)器有來自這個(gè) URL 的軟件,安裝在這個(gè)目錄中。您描述目標(biāo)環(huán)境的所需狀態(tài),系統(tǒng)會(huì)自動(dòng)根據(jù)請(qǐng)求進(jìn)行調(diào)整。
GitOps 團(tuán)隊(duì)將所有具有聲明狀態(tài)的文件存儲(chǔ)在一個(gè) Git 存儲(chǔ)庫中。在 Git 中存儲(chǔ)文件可以實(shí)現(xiàn)版本控制,幫助團(tuán)隊(duì)跟蹤基礎(chǔ)架構(gòu)隨時(shí)間的變化。版本控制也有助于:
- 故障排除。
- 審計(jì)。
- 回滾到以前的狀態(tài)。
一旦團(tuán)隊(duì)對(duì)存儲(chǔ)庫進(jìn)行了更改,CI 管道就會(huì)驗(yàn)證配置文件并運(yùn)行自動(dòng)化測(cè)試,之后任何員工都可以審查和批準(zhǔn)提交。然后更新通過 CD 管道合并到主分支。
GitOps 提供了兩種將更改應(yīng)用到生產(chǎn)環(huán)境的主要方法:
- Pull 方法:系統(tǒng)持續(xù)監(jiān)控 Git 存儲(chǔ)庫的更新。如果有變化,系統(tǒng)會(huì)提取新配置并將其應(yīng)用于基礎(chǔ)架構(gòu)。
- 推送方式(無代理):開發(fā)人員對(duì) Git 存儲(chǔ)庫進(jìn)行更改,系統(tǒng)立即觸發(fā)拉取更改并將其應(yīng)用到基礎(chǔ)設(shè)施。
最后,收斂機(jī)制將存儲(chǔ)庫中的更新應(yīng)用到生產(chǎn)集群。編排器將集群的當(dāng)前狀態(tài)與 Git 中的更新進(jìn)行比較并進(jìn)行更改,直到實(shí)際狀態(tài)和所需狀態(tài)相同。
如何開始使用 GitOps
如果您的團(tuán)隊(duì)已經(jīng)使用 Git 作為其 SCM 工具,并且已正確設(shè)置 DevOps 管道,那么實(shí)施 GitOps 很簡(jiǎn)單。你應(yīng)該做的就是:
- 將所有基礎(chǔ)架構(gòu)代碼移動(dòng)到專用的 Git 存儲(chǔ)庫中。
- 配置CI/CD 管道,使存儲(chǔ)庫成為交付管道的一部分。
如果您的組織在 DevOps 成熟度等級(jí)上較低并且不使用版本控制,請(qǐng)從設(shè)置Git 存儲(chǔ)庫開始。Git 與平臺(tái)無關(guān),因此請(qǐng)選擇您熟悉的任何本地或基于云的存儲(chǔ)庫。以下是一些受歡迎的選項(xiàng):
- GitHub。
- 位桶。
- Azure 存儲(chǔ)庫。
- GitLab。
在聲明式編程、Git 的內(nèi)置功能和 IaC 方面培訓(xùn)您的團(tuán)隊(duì)。嘗試引進(jìn)一些具有 GitOps 實(shí)踐經(jīng)驗(yàn)的新專家,同時(shí)為現(xiàn)有員工組織培訓(xùn)課程。接下來,您必須設(shè)置一個(gè) CI/CD 管道平臺(tái)來自動(dòng)執(zhí)行交付過程。管道必須跟蹤對(duì) Git 存儲(chǔ)庫的更改并自動(dòng)將它們部署到環(huán)境中。使用您的團(tuán)隊(duì)熟悉的工具。一般來說,Jenkins和 CircleCI 是任何 Git 存儲(chǔ)庫的絕佳選擇。BitBucket Pipeline 和 GitLab Pipelines 需要它們自己的存儲(chǔ)庫。
一旦 CI/CD 管道啟動(dòng)并運(yùn)行,您就需要一個(gè) GitOps 操作員。該機(jī)制充當(dāng)管道和實(shí)際系統(tǒng)之間的“中間人”。三個(gè)最受歡迎的選項(xiàng)是:
- Kubernetes 運(yùn)營(yíng)商。
- Azure 服務(wù)運(yùn)營(yíng)商。
- Terraform 云運(yùn)營(yíng)商。
操作員確保實(shí)際和期望的環(huán)境狀態(tài)相匹配。該機(jī)制還提供持續(xù)監(jiān)控,以維護(hù)您的基礎(chǔ)架構(gòu)的理想狀態(tài)。
GitOps 的好處
以下是在貴公司采用 GitOps 的主要好處:
- 簡(jiǎn)化的基礎(chǔ)架構(gòu)管理: GitOps 使團(tuán)隊(duì)能夠?qū)⒒A(chǔ)架構(gòu)作為整個(gè) DevOps 流程的一部分進(jìn)行管理。借助CI/CD 工具和自動(dòng)化部署,您可以快速測(cè)試和部署更改。
- 提高可靠性:所有基礎(chǔ)架構(gòu)更改都經(jīng)過全面審查和測(cè)試。經(jīng)過良好測(cè)試的更新顯著降低了出錯(cuò)和停機(jī)的可能性。
- 更快的部署:一旦更新合并到主分支,就會(huì)自動(dòng)部署基礎(chǔ)設(shè)施。這樣的設(shè)置減少了部署更改所需的時(shí)間,使團(tuán)隊(duì)能夠更快、更頻繁地發(fā)布新功能。
- 快速回滾: Git 的版本控制使團(tuán)隊(duì)能夠根據(jù)需要恢復(fù)和回滾。如果新更改破壞了集群中的某些內(nèi)容,您可以輕松解決問題。
- 授權(quán)開發(fā)人員:開發(fā)團(tuán)隊(duì)可以執(zhí)行傳統(tǒng)上留給 ITOps 的任務(wù)。如果開發(fā)人員希望部署新應(yīng)用程序或更改現(xiàn)有應(yīng)用程序,他們所做的只是更新存儲(chǔ)庫,自動(dòng)化流程會(huì)處理其余部分。
- 更多的團(tuán)隊(duì)間協(xié)作:就像 DevOps 一樣,GitOps 需要開發(fā)人員、運(yùn)營(yíng)團(tuán)隊(duì)和其他 IT 利益相關(guān)者之間的協(xié)作。
- 減少配置漂移的可能性: Git 為配置文件的更改提供完整的審計(jì)跟蹤。環(huán)境高度一致,您可以降低配置漂移的風(fēng)險(xiǎn)。
- 完整的 可聽性: Git 允許開發(fā)人員隨著時(shí)間的推移跟蹤基礎(chǔ)架構(gòu)。每當(dāng)出現(xiàn)故障或出現(xiàn)意外行為時(shí),這種關(guān)于誰對(duì)集群做了什么以及何時(shí)做了什么的審計(jì)跟蹤就很有價(jià)值。
- 合規(guī)性:使用聲明性基礎(chǔ)架構(gòu)即代碼可以更輕松地實(shí)現(xiàn)整個(gè)交付管道的合規(guī)性。
- 安全提升: GitOps 使團(tuán)隊(duì)能夠?qū)嵤┗?Git 的安全策略并集中管理。更新在合并到主分支之前得到徹底審查并需要批準(zhǔn),這降低了錯(cuò)誤或惡意代碼的危險(xiǎn)。
GitOps 缺點(diǎn)
雖然 GitOps 提供了一系列好處,但您必須牢記一些潛在的缺點(diǎn)。以下是采用 GitOps 的主要問題:
- 難以設(shè)置: GitOps 的最大挑戰(zhàn)是流程的初始設(shè)置。這種做法需要緊密集成和大量自動(dòng)化,而這通常很難正確設(shè)置。
- 額外的復(fù)雜性: GitOps 要求團(tuán)隊(duì)采用新的工作流程,如果您不熟悉 Git 和 DevOps 實(shí)踐,這將是一項(xiàng)挑戰(zhàn)。許多采用者必須在招聘和員工培訓(xùn)方面投入大量資金,以應(yīng)對(duì)陡峭的學(xué)習(xí)曲線。
- 兼容性問題:一些應(yīng)用程序不適合 GitOps。許多需要人工干預(yù)或?qū)iT部署流程的遺留系統(tǒng)很難(甚至不可能)與 GitOps 集成。
- 抵制變革:采用 GitOps 需要向協(xié)作、自動(dòng)化和持續(xù)改進(jìn)進(jìn)行重大的文化轉(zhuǎn)變。許多團(tuán)隊(duì)對(duì)這一變化并不熱心,這可能會(huì)在采用 GitOps 期間和之后引起問題。
- 確保 Git 安全:由于 Git 是唯一的真實(shí)來源,該平臺(tái)的存儲(chǔ)庫成為網(wǎng)絡(luò)攻擊的主要目標(biāo)。您必須控制對(duì)配置文件的訪問以防止數(shù)據(jù)泄露。
GitOps 正在取代 DevOps 嗎?
不,GitOps 不會(huì)取代 DevOps,也不會(huì)嘗試這樣做。GitOps 旨在取代嚴(yán)重依賴手動(dòng)任務(wù)和測(cè)試的老式基礎(chǔ)設(shè)施管理。公司將 GitOps 與其他 DevOps 實(shí)踐和工具結(jié)合使用,以實(shí)現(xiàn)更高水平的自動(dòng)化并加快上市時(shí)間。GitOps 通過以下方式支持 DevOps 計(jì)劃:
- 靈活且可擴(kuò)展的基礎(chǔ)架構(gòu),使團(tuán)隊(duì)更加敏捷。
- 跟蹤、回滾和審核更改的能力,這大大簡(jiǎn)化了團(tuán)隊(duì)解決問題的方式。
- 進(jìn)一步激勵(lì)開發(fā)人員、ITOps 專家和其他員工在配置管理方面進(jìn)行協(xié)作。
- 能夠自動(dòng)部署和管理基礎(chǔ)設(shè)施,同時(shí)確保所有環(huán)境的一致性。
您的團(tuán)隊(duì)和工作流程是否適合 GitOps?
GitOps 并不是每個(gè)團(tuán)隊(duì)和項(xiàng)目的正確選擇。一些公司認(rèn)為依賴單一工具和自動(dòng)構(gòu)建基礎(chǔ)設(shè)施并不理想。但是,如果您的團(tuán)隊(duì)擁有必要的專業(yè)知識(shí)并且您已經(jīng)投資于 DevOps,那么采用 GitOps 是不二之選。該實(shí)踐將所有耗時(shí)的手動(dòng)基礎(chǔ)設(shè)施管理任務(wù)轉(zhuǎn)化為自動(dòng)化管道,從而提高基礎(chǔ)設(shè)施的可見性、可靠性和穩(wěn)定性。